#pragma once

#include "tunneltype.h"

#include <string>

class Notepad
{
public:
    Notepad() = delete;

    enum class Lang { en, ru };
    static std::string langToString(Lang lang);
    static Lang stringToLang(const std::string& string);
    static std::string langToCode(Lang lang);

    struct ConfigComment {
        static const std::u8string type(Lang lang, TunnelType type);
        static const char8_t* clientAddress(Lang lang);
        static const char8_t* clientPort(Lang lang);
        static const char8_t* clientDestination(Lang lang);
        static const char8_t* clientDestinationPort(Lang lang);
        static const char8_t* clientKeepAlive(Lang lang);
        static const char8_t* serverAddress(Lang lang);
        static const char8_t* serverHost(Lang lang);
        static const char8_t* serverPort(Lang lang);
        static const char8_t* serverInport(Lang lang);
        static const char8_t* serverBlinded(Lang lang);
        static const char8_t* inbound(Lang lang);
        static const char8_t* outbound(Lang lang);
        static const char8_t* length(Lang lang);
        static const char8_t* quantity(Lang lang);
        static const char8_t* variance(Lang lang);
        static const char8_t* keysTransient(Lang lang);
        static const char8_t* keys(Lang lang);
        static const char8_t* footer(Lang lang, bool isBlinded);
    };

    struct SetterError {
        static const char8_t* name(Lang lang);
        static const char8_t* length(Lang lang);
        static const char8_t* variance(Lang lang);
        static const char8_t* quantity(Lang lang);
    };

    struct WebUi {
        static const char8_t* tagline(Lang lang);
        static const char8_t* error(Lang lang);
        static const char8_t* mainThOption(Lang lang);
        static const char8_t* mainThInput(Lang lang);
        static const char8_t* mainTunnelName(Lang lang);
        static const char8_t* mainTunnelNamePlaceholder(Lang lang);
        static const char8_t* mainTunnelType(Lang lang);
        static const char8_t* mainDropdownClientTCP(Lang lang);
        static const char8_t* mainDropdownClientUDP(Lang lang);
        static const char8_t* mainDropdownServerTCP(Lang lang);
        static const char8_t* mainDropdownServerUDP(Lang lang);
        static const char8_t* mainDropdownServerHTTP(Lang lang);
        static const char8_t* mainDropdownServerIRC(Lang lang);
        static const char8_t* mainDropdownSOCKSProxy(Lang lang);
        static const char8_t* mainDropdownHTTPProxy(Lang lang);
        static const char8_t* mainInbound(Lang lang);
        static const char8_t* mainOutbound(Lang lang);
        static const char8_t* mainLength(Lang lang);
        static const char8_t* mainQuantity(Lang lang);
        static const char8_t* mainVariance(Lang lang);
        static const char8_t* mainB33(Lang lang);
        static const char8_t* mainTransient(Lang lang);
        static const char8_t* mainKeepalive(Lang lang);
        static const char8_t* mainComments(Lang lang);
        static const char8_t* mainGenerate(Lang lang);
        static const char8_t* configGoBack(Lang lang);
    };

private:
    static const char8_t* tunnelTypeDescription(Lang lang, TunnelType type);
};
